package 面向对象编程;

import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Arrays;

/**
 * Created by   song 醉美柳舞之众星捧月
 * Date & Time  2017/10/9 21:03
 */
public class 类的组合BigIntegerBigDecimalString进阶StringBufferStringBuilder {
    public static void main(String[] args) {
        //  基本类型  包装类型 自动拆装箱
        // int double float byte long short char boolean
        Integer a = 223;
        Double b = 2.3;
        Character c = 'c';
        System.out.println(a = Integer.MAX_VALUE);
        System.out.println(a = Integer.MIN_VALUE);
        int x = Integer.parseInt("234");
        Double.parseDouble("45345.3");
        Integer.valueOf("233");
        System.out.println(Long.MAX_VALUE);
        System.out.println(Long.MIN_VALUE);
        Long li = new Long(510824199510234612L);

        //  超级大数

        BigInteger bigInteger = new BigInteger("510824199510234612");
        BigInteger bigInteger2 = new BigInteger("510824199510234612666666");
        // add 是加法;    divide 是除法  multiply是乘法 ,  sub..是减法
        System.out.println(bigInteger.multiply(bigInteger2));

        //  算钱的时候一定要用这个bigDecimal ，各种小数     金融场合
        BigDecimal bigDecimal = new BigDecimal("1.0");
        BigDecimal bigDecimal2 = new BigDecimal("3.0");
        System.out.println(bigDecimal.divide(bigDecimal2, 5, BigDecimal.ROUND_HALF_UP));
        // ROUND_HALF_UP  四舍五入

        String s = "java";       // 字符串是不可变对象
        s = "wang";   //     保存“java”的这个引用‘s’ 已经指向了另外一个了，就是“wang”，但是“java”依然存在，只是不能被引用了
        String s1 = "Welcome";
        String s2 = "Welcome";     // Java里面特有的机制; 为了节约内存空间,同样的字符串用的同样的空间,指向的是同一个地方; 限定的字符串，只有一份！
        System.out.println(s1.equals(s2));
        System.out.println(s1 == s2);
        String s3 = new String("Welcome");   // 强行创建一个新空间;   s1，s2  与 s3 的字符串是一样的但是内存空间不是同一个地方
        System.out.println(s1.equals(s3));
        System.out.println(s1 == s3);
        //  替换字符串
        String s4 = s1.replace("W", "C");   //  替换字符串, 单个替换： 将s1字符串里面所有的‘W’替换成‘C’
        String s5 = s1.replaceFirst("W", "C");   //  替换字符串, 首个替换： 将s1字符串里面 第一个 ‘W’替换成‘C’
        System.out.println(s4);
        String[] s6 = s1.split("c");      // 根据哪个来切分; split返回的是一个数组;将C之前的生成一个元素,将C之后的又生成一个元素
        System.out.println(Arrays.toString(s6));
        //   正则表达式
        boolean resule = "java to learn".matches("java to learn");
        boolean resule2 = "java to learn".matches("java.*");              //  正则表达式  * 通配符，要有个点'.'
        System.out.println(resule);
        System.out.println(resule2);


        // StringBuffer StringBuilder
        StringBuilder stringBuilder = new StringBuilder("wang");
        stringBuilder.append("sdasd").append(564545).append("asdasd");    //  字符串的添加;用“+”速度太慢;如果要经常修改字符串,建议使用这样
        System.out.println(stringBuilder.toString());

        StringBuffer stringBuffer = new StringBuffer("wang");
        stringBuffer.append("sdasd").append(564545).append("asdasd");
        System.out.println(stringBuffer.toString());

        //  Builder 线程不安全！但是效率高,超级快                   Buffer 是安全的,不会造成混乱,效率低
    }
}
